QuickSightのサンプルデータでML Insightを使用した予測機能を試してみる
データアナリティクス事業本部 機械学習チームの鈴木です。
QuickSightのML InsightのMLを使用した予測機能を利用したく、ユーザーガイドの『Amazon QuickSight で ML Insights を使用するためのデータセット要件 - Amazon QuickSight』で公開されているML Insights Sample Dataset VIを使って試してみました。
知りたかったこと
以下のことが知りたかったため、実際にQuickSightにデータを読み込んで予測を作成しました。
- Athenaデータソースから読み込んだデータでもML Insightによる予測ができるのか
- What-if分析がどのように使えるのか
- データ件数がデータセット要件よりも少ない時に予測が表示されるのか
MLを使用した予測機能について
QuickSightのML Insightのうち、内蔵のRandom Cut Forestアルゴリズムを使用して主要なビジネスメトリクスなどの値を予測することができます。
この機能については以下のユーザーガイドのページに記載があるのでご確認ください。
データの準備
まず、ml-insights.csv.zip
をユーザーガイドからダウンロードして、検証用のS3バケットにアップロードしました。
次に、以下のSQLをAthenaで実行し、sample_db
データベースにml_insights_raw
テーブルを作成しました。
-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。 CREATE EXTERNAL TABLE `sample_db.ml_insights_raw`( `aggregate_day` string COMMENT 'aggregate day', `product_categories` string COMMENT 'product category', `geo` string COMMENT 'geography', `revenue` float COMMENT 'revenue') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://<検証用のS3バケット名>/ml_insights' TBLPROPERTIES ( 'classification'='csv', 'columnsOrdered'='false', 'compressionType'='none', 'skip.header.line.count'='1', 'delimiter'=',')
このとき、ワークグループは以下のようなワークグループを使用しています。クエリの結果の場所
以外のクエリに関する設定はデフォルトです。これはAthenaデータソースの作成時にも使用します。
以下のようにml_insights_raw
テーブルからサンプルのデータが検索できるようになりました。
aggregate_day
カラムをDATE型にして、データのフォーマットもPARQUETにしておきたかったので、以下のようにCTASでテーブルを再作成しました。
-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。 CREATE TABLE sample_db.ml_insights WITH ( external_location = 's3://<検証用のS3バケット名>/ml_insights_parquet/', format = 'PARQUET') AS SELECT DATE(date_parse(aggregate_day, '%m/%d/%y')) AS aggregate_day, product_categories, geo, revenue FROM sample_db.ml_insights_raw
最後に、データ件数がデータセット要件よりも少ない時に予測が表示されるのかの確認用に、1ヶ月分のデータに絞ったテーブルも作成しておきました。
-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。 CREATE TABLE sample_db.ml_insights_tmp WITH ( external_location = 's3://<検証用のS3バケット名>/ml_insights_parquet_tmp/', format = 'PARQUET') AS SELECT * FROM ml_insights WHERE aggregate_day BETWEEN DATE '2018-05-01' AND DATE '2018-05-31' AND product_categories = 'Books' AND geo = 'Japan'
以下のように31件だけデータが入っています。Amazon QuickSight で ML Insights を使用するためのデータセット要件 - Amazon QuickSightによると、データの粒度が毎日の場合、少なくとも38日のデータが必要なので、データセット要件を満たさないデータと言えます。
やってみる
Athenaデータセットの作成
まずAthenaデータセットの作成から進めていきました。
QuickSightの管理画面のデータセット
より新しいデータセット
を選択しました。
データセットを作成でAthena
を選択しました。
新規AthenaデータソースでAthenaのワークグループを選択してデータソースを作成
を押しました。
テーブルの選択
でデータベースとテーブルを選択しました。
データセット作成の完了
でデータクエリを直接実行
を押しました。Visualize
を押して分析を新しく作成しました。
新規シートでインタラクティブシートを選びました。
折線グラフの作成
作成したAthenaデータセットで折れ線グラフを作成し、予測を行なってみました。ビジュアルタイプで折線グラフを選び、フィールドウェルにX軸と値を設定しました。
以下のようにできました。値は平均としました。この時点で自動的にAthenaにクエリが実行されて、グラフが描画されました。非常に便利ですね。
予測機能の利用
グラフ右上の三点リーダから予測を追加
を押しました。
以下のように予測プロパティの設定が表示されると同時に、デフォルト値でオレンジ色の予測が生成されました。
範囲を絞るとより分かりやすいですね。
ユーザーガイドによると、予測の長さ
の期間を戻す
では過去分のデータから予測の基礎となるパターンを探せるようです。
what-if分析の利用
オレンジの部分をクリックすると、以下のようにwhat-if分析のボタンが出てくるのでクリックしました。
シナリオを日付のターゲットを設定
として日付とターゲットを指定すると、その値を達成するまでにどのような推移が期待されるかの予測結果が確認できました。これでビジネス指標がどのように推移すべきか傾向を踏まえて目安が分かるので、現在の施策がどの程度効果があるか確認できそうです。
少ないデータ数での予測
最後にml_insights_tmp
テーブルのデータを使って少ないデータ数でも予測ができるか確認しました。
先と同じようにml_insights_tmp
Athenaデータセットを作成して、折線グラフで可視化しました。予測も設定しています。
作成した可視化だけ見ると以下のようになっていました。予測は生成されました。今回のデータはほとんど値が一定だったので予測もバンドが狭くなっていました。
データセット要件は満たさなくても予測自体はされるようです。ただし、予測結果は保証されないので、データ点数が少ない場合はより粒度の細かいデータセットを使う必要があります。
最後に
QuickSightのサンプルデータで、ML Insightを使用した予測機能を使った際の流れと、サンプル数が少ない時の挙動について確認してみました。
参考になりましたら幸いです。